<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>扩展属性与对象保护</title>
</head>
<body>
    
</body>
<script>
    let symbol = Symbol('我是一个Symbol')
    let arr = {
        name : 'jimmy',
        [symbol] : 'man'
    }
    for (const iterator in arr) {
        console.log(iterator)  //name
    }
    /*
        在遍历key的时候只有一个name  而找不到symbol的key  原因是Symbo被保护起来了  可以理解成像是类中的私有属性
    */
    for (const iterator of Object.getOwnPropertySymbols(arr)) {  //使用Object.getOwnPropertySymbols(对象) 就可以遍历到所有的Symbol类型的数据  但是遍历不到普通类型的数据
        console.log(iterator)  //  Symbol(我是一个Symbol)
    }  

    for (const iterator of Reflect.ownKeys(arr)) {
        console.log(iterator)  //此时就可以遍历到所有的数据啦 包括Symbol和普通类型的数据
    }


    /*
        Symbol总结：
            Symbol 可以简单的理解成是一个永远都不会重复的字符或者是数字  
                在大数据的时候经常都会使用  因为可以很大程度的解决数据耦合的问题   推荐使用
    */
</script>
</html>